// vite.config.mts
import { loadEnv, defineConfig } from "file:///Users/wushiyang/Documents/github/vue3-uniapp/node_modules/.pnpm/vite@5.2.8_@types+node@20.14.10_sass@1.77.6_terser@5.31.1/node_modules/vite/dist/node/index.js";
import uniModule from "file:///Users/wushiyang/Documents/github/vue3-uniapp/node_modules/.pnpm/@dcloudio+vite-plugin-uni@3.0.0-alpha-4020320240703001_@vueuse+core@10.11.0_vue@3.4.31_typesc_o6gtleetqhg5pd3vhfz4babjhm/node_modules/@dcloudio/vite-plugin-uni/dist/index.js";
import UnoCSS from "file:///Users/wushiyang/Documents/github/vue3-uniapp/node_modules/.pnpm/unocss@0.60.4_postcss@8.4.39_rollup@4.18.0_vite@5.2.8_@types+node@20.14.10_sass@1.77.6_terser@5.31.1_/node_modules/unocss/dist/vite.mjs";
import { resolve } from "path";
import AutoImport from "file:///Users/wushiyang/Documents/github/vue3-uniapp/node_modules/.pnpm/unplugin-auto-import@0.17.6_@vueuse+core@10.11.0_vue@3.4.31_typescript@5.5.3___rollup@4.18.0/node_modules/unplugin-auto-import/dist/vite.js";
import Components from "file:///Users/wushiyang/Documents/github/vue3-uniapp/node_modules/.pnpm/unplugin-vue-components@0.27.2_@babel+parser@7.24.7_rollup@4.18.0_vue@3.4.31_typescript@5.5.3_/node_modules/unplugin-vue-components/dist/vite.js";
import VueDevTools from "file:///Users/wushiyang/Documents/github/vue3-uniapp/node_modules/.pnpm/vite-plugin-vue-devtools@7.3.5_rollup@4.18.0_vite@5.2.8_@types+node@20.14.10_sass@1.77.6_ters_rwaq3m32fnavyzpfk7jqo76ay4/node_modules/vite-plugin-vue-devtools/dist/vite.mjs";

// src/other/componentsResolvers/tuniaoUiResolver.ts
var camelToKebab = (str) => {
  return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
};
var tuniaoUiResolver = () => {
  return [
    {
      type: "component",
      resolve: (name) => {
        if (!/^Tn[A-Z]\w*$/i.test(name)) {
          return;
        }
        const componentName = camelToKebab(name.replace(/^Tn/, ""));
        return {
          name: "default",
          from: `@tuniao/tnui-vue3-uniapp/components/${componentName}/src/${componentName}.vue`
          // uniapp通过后缀添加usingComponents,ts文件或无后缀文件不会生成
          // sideEffects: {
          //     from: '@tuniao/tn-style/dist/uniapp/index.css'
          // }
        };
      }
    }
  ];
};

// src/other/esbuildPlugins/pnpmPathPlugin.ts
import { resolve as pathResolve, dirname } from "path";
import { lstatSync, readlink } from "fs";
var getNodeModulesByAbsolutePath = async (path) => {
  const stats = lstatSync(path);
  if (stats.isSymbolicLink()) {
    const relativePath = await new Promise((resolve2, reject) => {
      readlink(path, async (err, resolvedPath) => {
        if (err)
          return reject(err);
        resolve2(resolvedPath);
      });
    });
    const baseDirPath = dirname(path);
    const absolutePath = pathResolve(baseDirPath, relativePath);
    const nodeModulesIndex = absolutePath.lastIndexOf("node_modules");
    if (nodeModulesIndex === -1)
      Promise.reject(
        new Error(
          `[pnpmPathPlugin] ${path}\u5BF9\u5E94\u7684\u7B26\u53F7\u94FE\u63A5\u4E0B\u6CA1\u6709node_modules`
        )
      );
    const parentNodeModulesPath = absolutePath.substring(
      0,
      nodeModulesIndex + "node_modules".length
    );
    return Promise.resolve({
      isSymbolicLink: true,
      nodeModules: parentNodeModulesPath
    });
  } else {
    const nodeModulesIndex = path.lastIndexOf("node_modules");
    if (nodeModulesIndex === -1)
      Promise.reject(
        new Error(`[pnpmPathPlugin] ${path}\u8DEF\u5F84\u4E0B\u6CA1\u6709node_modules`)
      );
    const parentNodeModulesPath = path.substring(
      0,
      nodeModulesIndex + "node_modules".length
    );
    return Promise.resolve({
      isSymbolicLink: false,
      nodeModules: parentNodeModulesPath
    });
  }
};
var getLastNodeModulesPathList = (path) => {
  const arr = path.split("/");
  let isPush = false;
  const paths = [];
  const lastIndex = arr.findLastIndex((item) => item === "node_modules");
  arr.reduce((previous, current, currentIndex) => {
    let returnVal = previous;
    if (current) {
      returnVal = `${returnVal}/${current}`;
      if (isPush) {
        paths.push(returnVal);
      }
      if (current === "node_modules" && currentIndex >= lastIndex) {
        isPush = true;
      }
    }
    return returnVal;
  }, "");
  return paths;
};
var resolvePath = async (paths, args, resolve2) => {
  try {
    const { path: importPath, importer, kind } = args;
    for (let i = 0; i < paths.length; i++) {
      const path = paths[i];
      const { isSymbolicLink, nodeModules } = await getNodeModulesByAbsolutePath(path);
      if (isSymbolicLink) {
        const result = await resolve2(importPath, {
          kind,
          importer,
          resolveDir: nodeModules
        });
        return Promise.resolve(result);
      }
    }
    throw new Error(
      `[pnpmPathPlugin]\u65E0\u6CD5\u5904\u7406${importer}\u91CC\u7684"${importPath}"`
    );
  } catch (e) {
    return Promise.reject(e);
  }
};
var pnpmPathPlugin = () => {
  return {
    name: "pnpmPathPlugin",
    setup(build) {
      build.onResolve(
        { filter: /^[@a-zA-Z][a-zA-Z].*$/, namespace: "file" },
        async (args) => {
          const {
            importer,
            resolveDir,
            namespace,
            kind,
            path: importPath
          } = args;
          if (importer.indexOf("node_modules") === -1) {
            return;
          }
          const result = await build.resolve(importPath, {
            kind,
            resolveDir
          });
          if (result.path && result.errors.length === 0) {
            return Promise.resolve({
              ...result
            });
          }
          return new Promise(async (resolve2, reject) => {
            try {
              const paths = getLastNodeModulesPathList(resolveDir);
              const result2 = await resolvePath(
                paths,
                args,
                build.resolve
              );
              resolve2({
                ...result2
              });
            } catch (e) {
              return reject(e);
            }
          });
        }
      );
    }
  };
};

// src/other/rollupPlugins/rollupPluginPnpmpath.ts
import { resolve as pathResolve2, dirname as dirname2 } from "path";
import { lstatSync as lstatSync2, readlink as readlink2 } from "fs";
var getNodeModulesByAbsolutePath2 = async (path) => {
  const stats = lstatSync2(path);
  if (stats.isSymbolicLink()) {
    const relativePath = await new Promise((resolve2, reject) => {
      readlink2(path, async (err, resolvedPath) => {
        if (err)
          return reject(err);
        resolve2(resolvedPath);
      });
    });
    const baseDirPath = dirname2(path);
    const absolutePath = pathResolve2(baseDirPath, relativePath);
    const nodeModulesIndex = absolutePath.lastIndexOf("node_modules");
    if (nodeModulesIndex === -1)
      Promise.reject(
        new Error(
          `[pnpmPathPlugin] ${path}\u5BF9\u5E94\u7684\u7B26\u53F7\u94FE\u63A5\u4E0B\u6CA1\u6709node_modules`
        )
      );
    const parentNodeModulesPath = absolutePath.substring(
      0,
      nodeModulesIndex + "node_modules".length
    );
    return Promise.resolve({
      isSymbolicLink: true,
      nodeModules: parentNodeModulesPath
    });
  } else {
    const nodeModulesIndex = path.lastIndexOf("node_modules");
    if (nodeModulesIndex === -1)
      Promise.reject(
        new Error(`[pnpmPathPlugin] ${path}\u8DEF\u5F84\u4E0B\u6CA1\u6709node_modules`)
      );
    const parentNodeModulesPath = path.substring(
      0,
      nodeModulesIndex + "node_modules".length
    );
    return Promise.resolve({
      isSymbolicLink: false,
      nodeModules: parentNodeModulesPath
    });
  }
};
var getLastNodeModulesPathList2 = (path) => {
  const arr = path.split("/");
  let isPush = false;
  const paths = [];
  const lastIndex = arr.findLastIndex((item) => item === "node_modules");
  arr.reduce((previous, current, currentIndex) => {
    let returnVal = previous;
    if (current) {
      returnVal = `${returnVal}/${current}`;
      if (isPush) {
        paths.push(returnVal);
      }
      if (current === "node_modules" && currentIndex >= lastIndex) {
        isPush = true;
      }
    }
    return returnVal;
  }, "");
  return paths;
};
var resolvePath2 = async (paths, args, resolve2) => {
  try {
    const { source: importPath, importer } = args;
    for (let i = 0; i < paths.length; i++) {
      const path = paths[i];
      const { isSymbolicLink, nodeModules } = await getNodeModulesByAbsolutePath2(path);
      if (isSymbolicLink) {
        const result = await resolve2(importPath, nodeModules);
        if (result) {
          return Promise.resolve(result);
        }
      }
    }
    throw new Error(
      `[rollupPluginPnpmpath]\u65E0\u6CD5\u5904\u7406${importer}\u91CC\u7684"${importPath}"`
    );
  } catch (e) {
    return Promise.reject(e);
  }
};
var rollupPluginPnpmpath = () => {
  return {
    name: "rollup-plugin-pnpmpath",
    resolveId: {
      async handler(source, importer, options) {
        if (importer === void 0 || !/^[@a-zA-Z][a-zA-Z].*$/.test(source) || importer.indexOf("node_modules") === -1) {
          return null;
        }
        const result = await this.resolve(source, importer);
        if (result) {
          return Promise.resolve({
            ...result
          });
        }
        return new Promise(async (resolve2, reject) => {
          try {
            const resolveDir = dirname2(importer);
            const paths = getLastNodeModulesPathList2(resolveDir);
            const result2 = await resolvePath2(
              paths,
              { source, importer },
              this.resolve
            );
            console.log(result2);
            return resolve2({
              ...result2
            });
          } catch (e) {
            return reject(e);
          }
        });
      }
    }
  };
};

// vite.config.mts
var __vite_injected_original_dirname = "/Users/wushiyang/Documents/github/vue3-uniapp";
var Uni = uniModule.default || uniModule;
var pathSrc = resolve(__vite_injected_original_dirname, "src");
var vite_config_default = defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd());
  return {
    resolve: {
      alias: {
        "@": pathSrc
      },
      preserveSymlinks: false
    },
    plugins: [
      vitePlugins(),
      // 自动导入参考： https://github.com/sxzz/element-plus-best-practices/blob/main/vite.config.ts
      AutoImport({
        // 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
        imports: [
          "vue",
          "@vueuse/core",
          "pinia"
          // 'vue-router',
          // 'vue-i18n'
        ],
        resolvers: [
          // 自动导入 Element Plus 相关函数，如：ElMessage, ElMessageBox... (带样式)
          // ElementPlusResolver(),
          // 自动导入图标组件
          // IconsResolver({})
        ],
        eslintrc: {
          // 是否自动生成 eslint 规则，建议生成之后设置 false
          enabled: true,
          // 指定自动导入函数 eslint 规则的文件
          filepath: "./.eslintrc-auto-import.json",
          globalsPropValue: true
        },
        // 是否在 vue 模板中自动导入
        vueTemplate: true,
        // 指定自动导入函数TS类型声明文件路径 (false:关闭自动生成)
        // dts: false
        dts: "src/typings/auto-imports.d.ts"
      }),
      Components({
        resolvers: [
          // 自动导入 Element Plus 组件
          // ElementPlusResolver(),
          // // 自动注册图标组件
          // IconsResolver({
          //     // element-plus图标库，其他图标库 https://icon-sets.iconify.design/
          //     enabledCollections: ['ep']
          // }),
          // DevUiResolver()
          tuniaoUiResolver()
        ],
        // 指定自定义组件位置(默认:src/components)
        dirs: ["src/components", "src/components/ui"],
        // 全局组件声明可以写在components.d.ts里，vite会自动生成的时候保留你的声明的
        exclude: [/.bak$/],
        // 指定自动导入组件TS类型声明文件路径 (false:关闭自动生成)
        // dts: false
        dts: "src/typings/components.d.ts"
      }),
      UnoCSS(),
      Uni(),
      // uni需放在各种批处理的后面
      VueDevTools({
        openInEditorHost: `http://localhost:${env.VITE_APP_PORT}`
      })
    ],
    server: {
      // 允许IP访问
      host: "0.0.0.0",
      // 应用端口 (默认:3000)
      port: Number(env.VITE_APP_PORT)
    },
    optimizeDeps: {
      include: ["@ant-design/colors"],
      esbuildOptions: {
        plugins: [pnpmPathPlugin()]
      }
    },
    build: {
      rollupOptions: {
        plugins: [rollupPluginPnpmpath()]
      }
    }
  };
});
export {
  vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcubXRzIiwgInNyYy9vdGhlci9jb21wb25lbnRzUmVzb2x2ZXJzL3R1bmlhb1VpUmVzb2x2ZXIudHMiLCAic3JjL290aGVyL2VzYnVpbGRQbHVnaW5zL3BucG1QYXRoUGx1Z2luLnRzIiwgInNyYy9vdGhlci9yb2xsdXBQbHVnaW5zL3JvbGx1cFBsdWdpblBucG1wYXRoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3d1c2hpeWFuZy9Eb2N1bWVudHMvZ2l0aHViL3Z1ZTMtdW5pYXBwXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvd3VzaGl5YW5nL0RvY3VtZW50cy9naXRodWIvdnVlMy11bmlhcHAvdml0ZS5jb25maWcubXRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy93dXNoaXlhbmcvRG9jdW1lbnRzL2dpdGh1Yi92dWUzLXVuaWFwcC92aXRlLmNvbmZpZy5tdHNcIjsvKlxuICogQEF1dGhvcjogXHU1NDM0XHU0RTE2XHU2MjZDIDE4MzY4MDk1MDQxQDE2My5jb21cbiAqIEBEYXRlOiAyMDI0LTA1LTIzIDExOjQwOjA5XG4gKiBATGFzdEVkaXRvcnM6IFx1NTQzNFx1NEUxNlx1NjI2QyAxODM2ODA5NTA0MUAxNjMuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDI0LTA3LTEyIDExOjM0OjAwXG4gKiBARmlsZVBhdGg6IC92dWUzLXVuaWFwcC92aXRlLmNvbmZpZy5tdHNcbiAqIEBEZXNjcmlwdGlvbjogXHU4RkQ5XHU2NjJGXHU5RUQ4XHU4QkE0XHU4QkJFXHU3RjZFLFx1OEJGN1x1OEJCRVx1N0Y2RWBjdXN0b21NYWRlYCwgXHU2MjUzXHU1RjAwa29yb0ZpbGVIZWFkZXJcdTY3RTVcdTc3MEJcdTkxNERcdTdGNkUgXHU4RkRCXHU4ODRDXHU4QkJFXHU3RjZFOiBodHRwczovL2dpdGh1Yi5jb20vT0JLb3JvMS9rb3JvMUZpbGVIZWFkZXIvd2lraS8lRTklODUlOEQlRTclQkQlQUVcbiAqL1xuLy8gdml0ZS5jb25maWcubXRzXG5pbXBvcnQgeyB0eXBlIFVzZXJDb25maWcsIHR5cGUgQ29uZmlnRW52LCBsb2FkRW52LCBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJztcbmltcG9ydCB1bmlNb2R1bGUgZnJvbSAnQGRjbG91ZGlvL3ZpdGUtcGx1Z2luLXVuaSc7XG5pbXBvcnQgVW5vQ1NTIGZyb20gJ3Vub2Nzcy92aXRlJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCBBdXRvSW1wb3J0IGZyb20gJ3VucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGUnO1xuaW1wb3J0IENvbXBvbmVudHMgZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvdml0ZSc7XG4vLyBodHRwczovL2RldnRvb2xzLW5leHQudnVlanMub3JnL1xuaW1wb3J0IFZ1ZURldlRvb2xzIGZyb20gJ3ZpdGUtcGx1Z2luLXZ1ZS1kZXZ0b29scyc7XG5cbmltcG9ydCB7IHR1bmlhb1VpUmVzb2x2ZXIgfSBmcm9tICcuL3NyYy9vdGhlci9jb21wb25lbnRzUmVzb2x2ZXJzL3R1bmlhb1VpUmVzb2x2ZXInO1xuaW1wb3J0IHsgcG5wbVBhdGhQbHVnaW4gfSBmcm9tICcuL3NyYy9vdGhlci9lc2J1aWxkUGx1Z2lucy9wbnBtUGF0aFBsdWdpbic7XG5pbXBvcnQgeyByb2xsdXBQbHVnaW5QbnBtcGF0aCB9IGZyb20gJy4vc3JjL290aGVyL3JvbGx1cFBsdWdpbnMvcm9sbHVwUGx1Z2luUG5wbXBhdGgnO1xuaW1wb3J0IHsgdml0ZVBsdWdpbkNvbmZpZyB9IGZyb20gJy4vc3JjL290aGVyL3ZpdGVQbHVnaW5zL3ZpdGVQbHVnaW5Db25maWcnO1xuLy8gaW1wb3J0IHtcbi8vICAgICBFbGVtZW50UGx1c1Jlc29sdmVyLFxuLy8gICAgIERldlVpUmVzb2x2ZXJcbi8vIH0gZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMvcmVzb2x2ZXJzJztcblxuLy8gQHRzLWV4cGVjdC1lcnJvciBtaXNzaW5nIHR5cGVzXG5jb25zdCBVbmkgPSB1bmlNb2R1bGUuZGVmYXVsdCB8fCB1bmlNb2R1bGU7XG5cbmNvbnN0IHBhdGhTcmMgPSByZXNvbHZlKF9fZGlybmFtZSwgJ3NyYycpO1xuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKCh7IG1vZGUgfTogQ29uZmlnRW52KTogVXNlckNvbmZpZyA9PiB7XG4gICAgY29uc3QgZW52ID0gbG9hZEVudihtb2RlLCBwcm9jZXNzLmN3ZCgpKTtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlOiB7XG4gICAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgICAgICdAJzogcGF0aFNyY1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXNlcnZlU3ltbGlua3M6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgIHZpdGVQbHVnaW5zKCksXG4gICAgICAgICAgICAvLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjVcdTUzQzJcdTgwMDNcdUZGMUEgaHR0cHM6Ly9naXRodWIuY29tL3N4enovZWxlbWVudC1wbHVzLWJlc3QtcHJhY3RpY2VzL2Jsb2IvbWFpbi92aXRlLmNvbmZpZy50c1xuICAgICAgICAgICAgQXV0b0ltcG9ydCh7XG4gICAgICAgICAgICAgICAgLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1IFZ1ZSBcdTc2RjhcdTUxNzNcdTUxRkRcdTY1NzBcdUZGMENcdTU5ODJcdUZGMUFyZWYsIHJlYWN0aXZlLCB0b1JlZiBcdTdCNDlcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICd2dWUnLFxuICAgICAgICAgICAgICAgICAgICAnQHZ1ZXVzZS9jb3JlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3BpbmlhJ1xuICAgICAgICAgICAgICAgICAgICAvLyAndnVlLXJvdXRlcicsXG4gICAgICAgICAgICAgICAgICAgIC8vICd2dWUtaTE4bidcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc29sdmVyczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjUgRWxlbWVudCBQbHVzIFx1NzZGOFx1NTE3M1x1NTFGRFx1NjU3MFx1RkYwQ1x1NTk4Mlx1RkYxQUVsTWVzc2FnZSwgRWxNZXNzYWdlQm94Li4uIChcdTVFMjZcdTY4MzdcdTVGMEYpXG4gICAgICAgICAgICAgICAgICAgIC8vIEVsZW1lbnRQbHVzUmVzb2x2ZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1XHU1NkZFXHU2ODA3XHU3RUM0XHU0RUY2XG4gICAgICAgICAgICAgICAgICAgIC8vIEljb25zUmVzb2x2ZXIoe30pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBlc2xpbnRyYzoge1xuICAgICAgICAgICAgICAgICAgICAvLyBcdTY2MkZcdTU0MjZcdTgxRUFcdTUyQThcdTc1MUZcdTYyMTAgZXNsaW50IFx1ODlDNFx1NTIxOVx1RkYwQ1x1NUVGQVx1OEJBRVx1NzUxRlx1NjIxMFx1NEU0Qlx1NTQwRVx1OEJCRVx1N0Y2RSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAvLyBcdTYzMDdcdTVCOUFcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjVcdTUxRkRcdTY1NzAgZXNsaW50IFx1ODlDNFx1NTIxOVx1NzY4NFx1NjU4N1x1NEVGNlxuICAgICAgICAgICAgICAgICAgICBmaWxlcGF0aDogJy4vLmVzbGludHJjLWF1dG8taW1wb3J0Lmpzb24nLFxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxzUHJvcFZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBcdTY2MkZcdTU0MjZcdTU3MjggdnVlIFx1NkEyMVx1Njc3Rlx1NEUyRFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NVxuICAgICAgICAgICAgICAgIHZ1ZVRlbXBsYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIFx1NjMwN1x1NUI5QVx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NVx1NTFGRFx1NjU3MFRTXHU3QzdCXHU1NzhCXHU1OEYwXHU2NjBFXHU2NTg3XHU0RUY2XHU4REVGXHU1Rjg0IChmYWxzZTpcdTUxNzNcdTk1RURcdTgxRUFcdTUyQThcdTc1MUZcdTYyMTApXG4gICAgICAgICAgICAgICAgLy8gZHRzOiBmYWxzZVxuICAgICAgICAgICAgICAgIGR0czogJ3NyYy90eXBpbmdzL2F1dG8taW1wb3J0cy5kLnRzJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBDb21wb25lbnRzKHtcbiAgICAgICAgICAgICAgICByZXNvbHZlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1IEVsZW1lbnQgUGx1cyBcdTdFQzRcdTRFRjZcbiAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudFBsdXNSZXNvbHZlcigpLFxuICAgICAgICAgICAgICAgICAgICAvLyAvLyBcdTgxRUFcdTUyQThcdTZDRThcdTUxOENcdTU2RkVcdTY4MDdcdTdFQzRcdTRFRjZcbiAgICAgICAgICAgICAgICAgICAgLy8gSWNvbnNSZXNvbHZlcih7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAvLyBlbGVtZW50LXBsdXNcdTU2RkVcdTY4MDdcdTVFOTNcdUZGMENcdTUxNzZcdTRFRDZcdTU2RkVcdTY4MDdcdTVFOTMgaHR0cHM6Ly9pY29uLXNldHMuaWNvbmlmeS5kZXNpZ24vXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBlbmFibGVkQ29sbGVjdGlvbnM6IFsnZXAnXVxuICAgICAgICAgICAgICAgICAgICAvLyB9KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gRGV2VWlSZXNvbHZlcigpXG4gICAgICAgICAgICAgICAgICAgIHR1bmlhb1VpUmVzb2x2ZXIoKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgLy8gXHU2MzA3XHU1QjlBXHU4MUVBXHU1QjlBXHU0RTQ5XHU3RUM0XHU0RUY2XHU0RjREXHU3RjZFKFx1OUVEOFx1OEJBNDpzcmMvY29tcG9uZW50cylcbiAgICAgICAgICAgICAgICBkaXJzOiBbJ3NyYy9jb21wb25lbnRzJywgJ3NyYy9jb21wb25lbnRzL3VpJ10sIC8vIFx1NTE2OFx1NUM0MFx1N0VDNFx1NEVGNlx1NThGMFx1NjYwRVx1NTNFRlx1NEVFNVx1NTE5OVx1NTcyOGNvbXBvbmVudHMuZC50c1x1OTFDQ1x1RkYwQ3ZpdGVcdTRGMUFcdTgxRUFcdTUyQThcdTc1MUZcdTYyMTBcdTc2ODRcdTY1RjZcdTUwMTlcdTRGRERcdTc1NTlcdTRGNjBcdTc2ODRcdTU4RjBcdTY2MEVcdTc2ODRcbiAgICAgICAgICAgICAgICBleGNsdWRlOiBbLy5iYWskL10sXG4gICAgICAgICAgICAgICAgLy8gXHU2MzA3XHU1QjlBXHU4MUVBXHU1MkE4XHU1QkZDXHU1MTY1XHU3RUM0XHU0RUY2VFNcdTdDN0JcdTU3OEJcdTU4RjBcdTY2MEVcdTY1ODdcdTRFRjZcdThERUZcdTVGODQgKGZhbHNlOlx1NTE3M1x1OTVFRFx1ODFFQVx1NTJBOFx1NzUxRlx1NjIxMClcbiAgICAgICAgICAgICAgICAvLyBkdHM6IGZhbHNlXG4gICAgICAgICAgICAgICAgZHRzOiAnc3JjL3R5cGluZ3MvY29tcG9uZW50cy5kLnRzJ1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBVbm9DU1MoKSxcbiAgICAgICAgICAgIFVuaSgpLCAvLyB1bmlcdTk3MDBcdTY1M0VcdTU3MjhcdTU0MDRcdTc5Q0RcdTYyNzlcdTU5MDRcdTc0MDZcdTc2ODRcdTU0MEVcdTk3NjJcbiAgICAgICAgICAgIFZ1ZURldlRvb2xzKHtcbiAgICAgICAgICAgICAgICBvcGVuSW5FZGl0b3JIb3N0OiBgaHR0cDovL2xvY2FsaG9zdDoke2Vudi5WSVRFX0FQUF9QT1JUfWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIHNlcnZlcjoge1xuICAgICAgICAgICAgLy8gXHU1MTQxXHU4QkI4SVBcdThCQkZcdTk1RUVcbiAgICAgICAgICAgIGhvc3Q6ICcwLjAuMC4wJyxcbiAgICAgICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1N0FFRlx1NTNFMyAoXHU5RUQ4XHU4QkE0OjMwMDApXG4gICAgICAgICAgICBwb3J0OiBOdW1iZXIoZW52LlZJVEVfQVBQX1BPUlQpXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGltaXplRGVwczoge1xuICAgICAgICAgICAgaW5jbHVkZTogWydAYW50LWRlc2lnbi9jb2xvcnMnXSxcbiAgICAgICAgICAgIGVzYnVpbGRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgcGx1Z2luczogW3BucG1QYXRoUGx1Z2luKCldXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICByb2xsdXBPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgcGx1Z2luczogW3JvbGx1cFBsdWdpblBucG1wYXRoKCldXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy93dXNoaXlhbmcvRG9jdW1lbnRzL2dpdGh1Yi92dWUzLXVuaWFwcC9zcmMvb3RoZXIvY29tcG9uZW50c1Jlc29sdmVyc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3d1c2hpeWFuZy9Eb2N1bWVudHMvZ2l0aHViL3Z1ZTMtdW5pYXBwL3NyYy9vdGhlci9jb21wb25lbnRzUmVzb2x2ZXJzL3R1bmlhb1VpUmVzb2x2ZXIudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL3d1c2hpeWFuZy9Eb2N1bWVudHMvZ2l0aHViL3Z1ZTMtdW5pYXBwL3NyYy9vdGhlci9jb21wb25lbnRzUmVzb2x2ZXJzL3R1bmlhb1VpUmVzb2x2ZXIudHNcIjsvKlxuICogQEF1dGhvcjogXHU1NDM0XHU0RTE2XHU2MjZDIDE4MzY4MDk1MDQxQDE2My5jb21cbiAqIEBEYXRlOiAyMDI0LTA1LTI3IDE2OjQzOjE1XG4gKiBATGFzdEVkaXRvcnM6IFx1NTQzNFx1NEUxNlx1NjI2QyAxODM2ODA5NTA0MUAxNjMuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDI0LTA3LTA1IDE1OjQxOjU4XG4gKiBARmlsZVBhdGg6IC92dWUzLXVuaWFwcC9zcmMvcmVzb2x2ZXJzL2luZGV4LnRzXG4gKiBARGVzY3JpcHRpb246IFx1OEZEOVx1NjYyRlx1OUVEOFx1OEJBNFx1OEJCRVx1N0Y2RSxcdThCRjdcdThCQkVcdTdGNkVgY3VzdG9tTWFkZWAsIFx1NjI1M1x1NUYwMGtvcm9GaWxlSGVhZGVyXHU2N0U1XHU3NzBCXHU5MTREXHU3RjZFIFx1OEZEQlx1ODg0Q1x1OEJCRVx1N0Y2RTogaHR0cHM6Ly9naXRodWIuY29tL09CS29ybzEva29ybzFGaWxlSGVhZGVyL3dpa2kvJUU5JTg1JThEJUU3JUJEJUFFXG4gKi9cbmltcG9ydCB0eXBlIHtcbiAgICBDb21wb25lbnRSZXNvbHZlcixcbiAgICBTaWRlRWZmZWN0c0luZm9cbn0gZnJvbSAndW5wbHVnaW4tdnVlLWNvbXBvbmVudHMnO1xuXG5jb25zdCBjYW1lbFRvS2ViYWIgPSAoc3RyOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMS0kMicpLnRvTG93ZXJDYXNlKCk7XG59O1xuLy8gbGV0IGlzRmlyc3QgPSB0cnVlO1xuZXhwb3J0IGNvbnN0IHR1bmlhb1VpUmVzb2x2ZXIgPSAoKTogQ29tcG9uZW50UmVzb2x2ZXJbXSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NvbXBvbmVudCcsXG4gICAgICAgICAgICByZXNvbHZlOiAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCEvXlRuW0EtWl1cXHcqJC9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gY2FtZWxUb0tlYmFiKG5hbWUucmVwbGFjZSgvXlRuLywgJycpKTtcbiAgICAgICAgICAgICAgICAvLyBsZXQgc2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzSW5mbztcbiAgICAgICAgICAgICAgICAvLyBpZiAoaXNGaXJzdCkge1xuICAgICAgICAgICAgICAgIC8vICAgICBzaWRlRWZmZWN0cyA9IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGZyb206ICdAdHVuaWFvL3RuLXN0eWxlL2Rpc3QvdW5pYXBwL2luZGV4LmNzcydcbiAgICAgICAgICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgICAgICAgICAvLyAgICAgaXNGaXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgICAgIGZyb206IGBAdHVuaWFvL3RudWktdnVlMy11bmlhcHAvY29tcG9uZW50cy8ke2NvbXBvbmVudE5hbWV9L3NyYy8ke2NvbXBvbmVudE5hbWV9LnZ1ZWAgLy8gdW5pYXBwXHU5MDFBXHU4RkM3XHU1NDBFXHU3RjAwXHU2REZCXHU1MkEwdXNpbmdDb21wb25lbnRzLHRzXHU2NTg3XHU0RUY2XHU2MjE2XHU2NUUwXHU1NDBFXHU3RjAwXHU2NTg3XHU0RUY2XHU0RTBEXHU0RjFBXHU3NTFGXHU2MjEwXG4gICAgICAgICAgICAgICAgICAgIC8vIHNpZGVFZmZlY3RzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBmcm9tOiAnQHR1bmlhby90bi1zdHlsZS9kaXN0L3VuaWFwcC9pbmRleC5jc3MnXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXTtcbn07XG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIi9Vc2Vycy93dXNoaXlhbmcvRG9jdW1lbnRzL2dpdGh1Yi92dWUzLXVuaWFwcC9zcmMvb3RoZXIvZXNidWlsZFBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy93dXNoaXlhbmcvRG9jdW1lbnRzL2dpdGh1Yi92dWUzLXVuaWFwcC9zcmMvb3RoZXIvZXNidWlsZFBsdWdpbnMvcG5wbVBhdGhQbHVnaW4udHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL3d1c2hpeWFuZy9Eb2N1bWVudHMvZ2l0aHViL3Z1ZTMtdW5pYXBwL3NyYy9vdGhlci9lc2J1aWxkUGx1Z2lucy9wbnBtUGF0aFBsdWdpbi50c1wiOy8qXG4gKiBAQXV0aG9yOiBcdTU0MzRcdTRFMTZcdTYyNkMgMTgzNjgwOTUwNDFAMTYzLmNvbVxuICogQERhdGU6IDIwMjQtMDctMDkgMTE6NTk6MTRcbiAqIEBMYXN0RWRpdG9yczogXHU1NDM0XHU0RTE2XHU2MjZDIDE4MzY4MDk1MDQxQDE2My5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjQtMDctMTIgMTA6MjQ6MDFcbiAqIEBGaWxlUGF0aDogL3Z1ZTMtdW5pYXBwL3NyYy9vdGhlci9lc2J1aWxkUGx1Z2lucy9wbnBtUGF0aFBsdWdpbi50c1xuICogQERlc2NyaXB0aW9uOiBcdThGRDlcdTY2MkZcdTlFRDhcdThCQTRcdThCQkVcdTdGNkUsXHU4QkY3XHU4QkJFXHU3RjZFYGN1c3RvbU1hZGVgLCBcdTYyNTNcdTVGMDBrb3JvRmlsZUhlYWRlclx1NjdFNVx1NzcwQlx1OTE0RFx1N0Y2RSBcdThGREJcdTg4NENcdThCQkVcdTdGNkU6IGh0dHBzOi8vZ2l0aHViLmNvbS9PQktvcm8xL2tvcm8xRmlsZUhlYWRlci93aWtpLyVFOSU4NSU4RCVFNyVCRCVBRVxuICovXG5pbXBvcnQgdHlwZSB7XG4gICAgUGx1Z2luLFxuICAgIFBsdWdpbkJ1aWxkLFxuICAgIE9uUmVzb2x2ZUFyZ3MsXG4gICAgUmVzb2x2ZVJlc3VsdFxufSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7IHJlc29sdmUgYXMgcGF0aFJlc29sdmUsIGpvaW4sIGRpcm5hbWUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGxzdGF0U3luYywgcmVhZGxpbmssIGxzdGF0LCByZWFkbGlua1N5bmMgfSBmcm9tICdmcyc7XG5cbi8vIFx1NEVDRVx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFx1ODNCN1x1NTNENm5vZGVfbW9kdWxlc1x1NzY4NFx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFx1NjIxNlx1NEVDRVx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFx1ODNCN1x1NTNENlx1ODNCN1x1NTNENlx1N0IyNlx1NTNGN1x1OTRGRVx1NjNBNVx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFx1NzY4NG5vZGVfbW9kdWxlc1x1NzY4NFx1N0VERFx1NUJGOVx1OERFRlx1NUY4NFxuY29uc3QgZ2V0Tm9kZU1vZHVsZXNCeUFic29sdXRlUGF0aCA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBzdGF0cyA9IGxzdGF0U3luYyhwYXRoKTtcbiAgICBpZiAoc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBhd2FpdCBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHJlYWRsaW5rKHBhdGgsIGFzeW5jIChlcnIsIHJlc29sdmVkUGF0aCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJhc2VEaXJQYXRoID0gZGlybmFtZShwYXRoKTtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gcGF0aFJlc29sdmUoYmFzZURpclBhdGgsIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgIGNvbnN0IG5vZGVNb2R1bGVzSW5kZXggPSBhYnNvbHV0ZVBhdGgubGFzdEluZGV4T2YoJ25vZGVfbW9kdWxlcycpO1xuICAgICAgICBpZiAobm9kZU1vZHVsZXNJbmRleCA9PT0gLTEpXG4gICAgICAgICAgICBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBbcG5wbVBhdGhQbHVnaW5dICR7cGF0aH1cdTVCRjlcdTVFOTRcdTc2ODRcdTdCMjZcdTUzRjdcdTk0RkVcdTYzQTVcdTRFMEJcdTZDQTFcdTY3MDlub2RlX21vZHVsZXNgXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwYXJlbnROb2RlTW9kdWxlc1BhdGggPSBhYnNvbHV0ZVBhdGguc3Vic3RyaW5nKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG5vZGVNb2R1bGVzSW5kZXggKyAnbm9kZV9tb2R1bGVzJy5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBpc1N5bWJvbGljTGluazogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGVNb2R1bGVzOiBwYXJlbnROb2RlTW9kdWxlc1BhdGhcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgbm9kZU1vZHVsZXNJbmRleCA9IHBhdGgubGFzdEluZGV4T2YoJ25vZGVfbW9kdWxlcycpO1xuICAgICAgICBpZiAobm9kZU1vZHVsZXNJbmRleCA9PT0gLTEpXG4gICAgICAgICAgICBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICAgICAgICBuZXcgRXJyb3IoYFtwbnBtUGF0aFBsdWdpbl0gJHtwYXRofVx1OERFRlx1NUY4NFx1NEUwQlx1NkNBMVx1NjcwOW5vZGVfbW9kdWxlc2ApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGVNb2R1bGVzUGF0aCA9IHBhdGguc3Vic3RyaW5nKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIG5vZGVNb2R1bGVzSW5kZXggKyAnbm9kZV9tb2R1bGVzJy5sZW5ndGhcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBpc1N5bWJvbGljTGluazogZmFsc2UsXG4gICAgICAgICAgICBub2RlTW9kdWxlczogcGFyZW50Tm9kZU1vZHVsZXNQYXRoXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbi8vIFx1NEVDRVx1NjcwMFx1NTQwRVx1NzY4NG5vZGVNb2R1bGVzXHU1NDBFXHU4M0I3XHU1M0Q2XHU4REVGXHU1Rjg0XHU2NTcwXHU3RUM0XG5jb25zdCBnZXRMYXN0Tm9kZU1vZHVsZXNQYXRoTGlzdCA9IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBhcnIgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgbGV0IGlzUHVzaCA9IGZhbHNlO1xuICAgIGNvbnN0IHBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGFyci5maW5kTGFzdEluZGV4KChpdGVtKSA9PiBpdGVtID09PSAnbm9kZV9tb2R1bGVzJyk7XG4gICAgYXJyLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQsIGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgICBsZXQgcmV0dXJuVmFsID0gcHJldmlvdXM7XG4gICAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgICAgICByZXR1cm5WYWwgPSBgJHtyZXR1cm5WYWx9LyR7Y3VycmVudH1gO1xuICAgICAgICAgICAgaWYgKGlzUHVzaCkge1xuICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gocmV0dXJuVmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSAnbm9kZV9tb2R1bGVzJyAmJiBjdXJyZW50SW5kZXggPj0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgaXNQdXNoID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xuICAgIH0sICcnKTtcbiAgICByZXR1cm4gcGF0aHM7XG59O1xuXG4vLyBcdTc1Mjhlc2J1aWxkXHU3Njg0YnVpbGQucmVzb2x2ZVx1NTkwNFx1NzQwNlx1OERFRlx1NUY4NFxuY29uc3QgcmVzb2x2ZVBhdGggPSBhc3luYyAoXG4gICAgcGF0aHM6IHN0cmluZ1tdLFxuICAgIGFyZ3M6IE9uUmVzb2x2ZUFyZ3MsXG4gICAgcmVzb2x2ZTogUGx1Z2luQnVpbGRbJ3Jlc29sdmUnXVxuKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBwYXRoOiBpbXBvcnRQYXRoLCBpbXBvcnRlciwga2luZCB9ID0gYXJncztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IHBhdGhzW2ldO1xuICAgICAgICAgICAgY29uc3QgeyBpc1N5bWJvbGljTGluaywgbm9kZU1vZHVsZXMgfSA9XG4gICAgICAgICAgICAgICAgYXdhaXQgZ2V0Tm9kZU1vZHVsZXNCeUFic29sdXRlUGF0aChwYXRoKTtcbiAgICAgICAgICAgIGlmIChpc1N5bWJvbGljTGluaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVzb2x2ZVJlc3VsdCA9IGF3YWl0IHJlc29sdmUoaW1wb3J0UGF0aCwge1xuICAgICAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgICAgICBpbXBvcnRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZURpcjogbm9kZU1vZHVsZXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFtwbnBtUGF0aFBsdWdpbl1cdTY1RTBcdTZDRDVcdTU5MDRcdTc0MDYke2ltcG9ydGVyfVx1OTFDQ1x1NzY4NFwiJHtpbXBvcnRQYXRofVwiYFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwbnBtUGF0aFBsdWdpbiA9ICgpOiBQbHVnaW4gPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdwbnBtUGF0aFBsdWdpbicsXG4gICAgICAgIHNldHVwKGJ1aWxkKSB7XG4gICAgICAgICAgICBidWlsZC5vblJlc29sdmUoXG4gICAgICAgICAgICAgICAgeyBmaWx0ZXI6IC9eW0BhLXpBLVpdW2EtekEtWl0uKiQvLCBuYW1lc3BhY2U6ICdmaWxlJyB9LFxuICAgICAgICAgICAgICAgIGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZURpcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpbXBvcnRQYXRoXG4gICAgICAgICAgICAgICAgICAgIH0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gXHU5NzVFbm9kZV9tb2R1bGVzXHU3Njg0XHU1MzA1XHU1RjE1XHU3NTI4XHU3Njg0XHU1MzA1XHU3NkY0XHU2M0E1XHU5RUQ4XHU4QkE0ZXNidWlsZFx1NUJGQ1x1NTE2NVx1OTAzQlx1OEY5MVx1NTkwNFx1NzQwNlxuICAgICAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZXIuaW5kZXhPZignbm9kZV9tb2R1bGVzJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYnVpbGQucmVzb2x2ZShpbXBvcnRQYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZURpclxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gXHU5MDFBXHU3NTI4XHU5MDNCXHU4RjkxXHU0RTBEXHU2MkE1XHU5NTE5XHU4RkQ0XHU1NkRFXHVGRjBDXHU1NDI2XHU1MjE5XHU3NkY0XHU2M0E1XHU0RTBCXHU0RTAwXHU2QjY1XHU1OTA0XHU3NDA2XHU3QjI2XHU1M0Y3XHU5NEZFXHU2M0E1XHU1QkZDXHU4MUY0XHU2NUUwXHU2Q0Q1XHU2MjdFXHU1MjMwXHU4REVGXHU1Rjg0XHU3Njg0XHU5NUVFXHU5ODk4XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucGF0aCAmJiByZXN1bHQuZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coMTExLCBhcmdzLCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub2RlX21vZHVsZXNcdTc2ODRcdTUzMDVcdTVGMTVcdTc1MjhcdTc2ODRcdTUzMDVcdTk3MDBcdTcyNzlcdTZCOEFcdTU5MDRcdTc0MDZcdUZGMENcdTU2RTBcdTRFM0FwbnBtXHU1MzA1XHU0RjlEXHU4RDU2XHU3NkVFXHU1RjU1XHU3RUQzXHU2Nzg0XHU0RTBEXHU2NjJGXHU1RTczXHU5NEZBXHU3Njg0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRMYXN0Tm9kZU1vZHVsZXNQYXRoTGlzdChyZXNvbHZlRGlyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNvbHZlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkLnJlc29sdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKDIyMiwgYXJncywgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvd3VzaGl5YW5nL0RvY3VtZW50cy9naXRodWIvdnVlMy11bmlhcHAvc3JjL290aGVyL3JvbGx1cFBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9Vc2Vycy93dXNoaXlhbmcvRG9jdW1lbnRzL2dpdGh1Yi92dWUzLXVuaWFwcC9zcmMvb3RoZXIvcm9sbHVwUGx1Z2lucy9yb2xsdXBQbHVnaW5QbnBtcGF0aC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vVXNlcnMvd3VzaGl5YW5nL0RvY3VtZW50cy9naXRodWIvdnVlMy11bmlhcHAvc3JjL290aGVyL3JvbGx1cFBsdWdpbnMvcm9sbHVwUGx1Z2luUG5wbXBhdGgudHNcIjsvKlxuICogQEF1dGhvcjogXHU1NDM0XHU0RTE2XHU2MjZDIDE4MzY4MDk1MDQxQDE2My5jb21cbiAqIEBEYXRlOiAyMDI0LTA3LTEwIDA5OjIxOjQyXG4gKiBATGFzdEVkaXRvcnM6IFx1NTQzNFx1NEUxNlx1NjI2QyAxODM2ODA5NTA0MUAxNjMuY29tXG4gKiBATGFzdEVkaXRUaW1lOiAyMDI0LTA3LTEyIDEwOjMxOjUwXG4gKiBARmlsZVBhdGg6IC92dWUzLXVuaWFwcC9zcmMvb3RoZXIvcm9sbHVwUGx1Z2lucy9yb2xsdXBQbHVnaW5QbnBtcGF0aC50c1xuICogQERlc2NyaXB0aW9uOiBcdThGRDlcdTY2MkZcdTlFRDhcdThCQTRcdThCQkVcdTdGNkUsXHU4QkY3XHU4QkJFXHU3RjZFYGN1c3RvbU1hZGVgLCBcdTYyNTNcdTVGMDBrb3JvRmlsZUhlYWRlclx1NjdFNVx1NzcwQlx1OTE0RFx1N0Y2RSBcdThGREJcdTg4NENcdThCQkVcdTdGNkU6IGh0dHBzOi8vZ2l0aHViLmNvbS9PQktvcm8xL2tvcm8xRmlsZUhlYWRlci93aWtpLyVFOSU4NSU4RCVFNyVCRCVBRVxuICovXG5cbmltcG9ydCB0eXBlIHsgSW5wdXRQbHVnaW5PcHRpb24sIFBsdWdpbkNvbnRleHQsIFJlc29sdmVkSWQgfSBmcm9tICdyb2xsdXAnO1xuaW1wb3J0IHsgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSwgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbHN0YXRTeW5jLCByZWFkbGluayB9IGZyb20gJ2ZzJztcblxuLy8gXHU0RUNFXHU3RUREXHU1QkY5XHU4REVGXHU1Rjg0XHU4M0I3XHU1M0Q2bm9kZV9tb2R1bGVzXHU3Njg0XHU3RUREXHU1QkY5XHU4REVGXHU1Rjg0XHU2MjE2XHU0RUNFXHU3RUREXHU1QkY5XHU4REVGXHU1Rjg0XHU4M0I3XHU1M0Q2XHU4M0I3XHU1M0Q2XHU3QjI2XHU1M0Y3XHU5NEZFXHU2M0E1XHU3RUREXHU1QkY5XHU4REVGXHU1Rjg0XHU3Njg0bm9kZV9tb2R1bGVzXHU3Njg0XHU3RUREXHU1QkY5XHU4REVGXHU1Rjg0XG5jb25zdCBnZXROb2RlTW9kdWxlc0J5QWJzb2x1dGVQYXRoID0gYXN5bmMgKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHN0YXRzID0gbHN0YXRTeW5jKHBhdGgpO1xuICAgIGlmIChzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGF3YWl0IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcmVhZGxpbmsocGF0aCwgYXN5bmMgKGVyciwgcmVzb2x2ZWRQYXRoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYmFzZURpclBhdGggPSBkaXJuYW1lKHBhdGgpO1xuICAgICAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwYXRoUmVzb2x2ZShiYXNlRGlyUGF0aCwgcmVsYXRpdmVQYXRoKTtcbiAgICAgICAgY29uc3Qgbm9kZU1vZHVsZXNJbmRleCA9IGFic29sdXRlUGF0aC5sYXN0SW5kZXhPZignbm9kZV9tb2R1bGVzJyk7XG4gICAgICAgIGlmIChub2RlTW9kdWxlc0luZGV4ID09PSAtMSlcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFtwbnBtUGF0aFBsdWdpbl0gJHtwYXRofVx1NUJGOVx1NUU5NFx1NzY4NFx1N0IyNlx1NTNGN1x1OTRGRVx1NjNBNVx1NEUwQlx1NkNBMVx1NjcwOW5vZGVfbW9kdWxlc2BcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGVNb2R1bGVzUGF0aCA9IGFic29sdXRlUGF0aC5zdWJzdHJpbmcoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgbm9kZU1vZHVsZXNJbmRleCArICdub2RlX21vZHVsZXMnLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgIGlzU3ltYm9saWNMaW5rOiB0cnVlLFxuICAgICAgICAgICAgbm9kZU1vZHVsZXM6IHBhcmVudE5vZGVNb2R1bGVzUGF0aFxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBub2RlTW9kdWxlc0luZGV4ID0gcGF0aC5sYXN0SW5kZXhPZignbm9kZV9tb2R1bGVzJyk7XG4gICAgICAgIGlmIChub2RlTW9kdWxlc0luZGV4ID09PSAtMSlcbiAgICAgICAgICAgIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBFcnJvcihgW3BucG1QYXRoUGx1Z2luXSAke3BhdGh9XHU4REVGXHU1Rjg0XHU0RTBCXHU2Q0ExXHU2NzA5bm9kZV9tb2R1bGVzYClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZU1vZHVsZXNQYXRoID0gcGF0aC5zdWJzdHJpbmcoXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgbm9kZU1vZHVsZXNJbmRleCArICdub2RlX21vZHVsZXMnLmxlbmd0aFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgIGlzU3ltYm9saWNMaW5rOiBmYWxzZSxcbiAgICAgICAgICAgIG5vZGVNb2R1bGVzOiBwYXJlbnROb2RlTW9kdWxlc1BhdGhcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuLy8gXHU0RUNFXHU2NzAwXHU1NDBFXHU3Njg0bm9kZU1vZHVsZXNcdTU0MEVcdTgzQjdcdTUzRDZcdThERUZcdTVGODRcdTY1NzBcdTdFQzRcbmNvbnN0IGdldExhc3ROb2RlTW9kdWxlc1BhdGhMaXN0ID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGFyciA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICBsZXQgaXNQdXNoID0gZmFsc2U7XG4gICAgY29uc3QgcGF0aHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbGFzdEluZGV4ID0gYXJyLmZpbmRMYXN0SW5kZXgoKGl0ZW0pID0+IGl0ZW0gPT09ICdub2RlX21vZHVsZXMnKTtcbiAgICBhcnIucmVkdWNlKChwcmV2aW91cywgY3VycmVudCwgY3VycmVudEluZGV4KSA9PiB7XG4gICAgICAgIGxldCByZXR1cm5WYWwgPSBwcmV2aW91cztcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVyblZhbCA9IGAke3JldHVyblZhbH0vJHtjdXJyZW50fWA7XG4gICAgICAgICAgICBpZiAoaXNQdXNoKSB7XG4gICAgICAgICAgICAgICAgcGF0aHMucHVzaChyZXR1cm5WYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdub2RlX21vZHVsZXMnICYmIGN1cnJlbnRJbmRleCA+PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpc1B1c2ggPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5WYWw7XG4gICAgfSwgJycpO1xuICAgIHJldHVybiBwYXRocztcbn07XG5cbi8vIFx1NzUyOGVzYnVpbGRcdTc2ODRidWlsZC5yZXNvbHZlXHU1OTA0XHU3NDA2XHU4REVGXHU1Rjg0XG5jb25zdCByZXNvbHZlUGF0aCA9IGFzeW5jIChcbiAgICBwYXRoczogc3RyaW5nW10sXG4gICAgYXJnczogeyBzb3VyY2U6IHN0cmluZzsgaW1wb3J0ZXI6IHN0cmluZyB9LFxuICAgIHJlc29sdmU6IFBsdWdpbkNvbnRleHRbJ3Jlc29sdmUnXVxuKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBzb3VyY2U6IGltcG9ydFBhdGgsIGltcG9ydGVyIH0gPSBhcmdzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gcGF0aHNbaV07XG4gICAgICAgICAgICBjb25zdCB7IGlzU3ltYm9saWNMaW5rLCBub2RlTW9kdWxlcyB9ID1cbiAgICAgICAgICAgICAgICBhd2FpdCBnZXROb2RlTW9kdWxlc0J5QWJzb2x1dGVQYXRoKHBhdGgpO1xuICAgICAgICAgICAgaWYgKGlzU3ltYm9saWNMaW5rKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzb2x2ZShpbXBvcnRQYXRoLCBub2RlTW9kdWxlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBbcm9sbHVwUGx1Z2luUG5wbXBhdGhdXHU2NUUwXHU2Q0Q1XHU1OTA0XHU3NDA2JHtpbXBvcnRlcn1cdTkxQ0NcdTc2ODRcIiR7aW1wb3J0UGF0aH1cImBcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgcm9sbHVwUGx1Z2luUG5wbXBhdGggPSAoKTogSW5wdXRQbHVnaW5PcHRpb24gPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdyb2xsdXAtcGx1Z2luLXBucG1wYXRoJyxcbiAgICAgICAgcmVzb2x2ZUlkOiB7XG4gICAgICAgICAgICBhc3luYyBoYW5kbGVyKHNvdXJjZSwgaW1wb3J0ZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGltcG9ydGVyID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgIS9eW0BhLXpBLVpdW2EtekEtWl0uKiQvLnRlc3Qoc291cmNlKSB8fFxuICAgICAgICAgICAgICAgICAgICBpbXBvcnRlci5pbmRleE9mKCdub2RlX21vZHVsZXMnKSA9PT0gLTFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIG51bGxcdTRGMUFcdThDMDNcdTc1MjhcdTUxNzZcdTRFRDZyZXNvbHZlSWRcdTU5MDRcdTc0MDZcdUZGMENcdTY3MDBcdTdFQzhcdTRGN0ZcdTc1MjhcdTlFRDhcdThCQTRcdTkwM0JcdThGOTFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYXJncyk7XG4gICAgICAgICAgICAgICAgLy8gXHU5NzVFbm9kZV9tb2R1bGVzXHU3Njg0XHU1MzA1XHU1RjE1XHU3NTI4XHU3Njg0XHU1MzA1XHU3NkY0XHU2M0E1XHU5RUQ4XHU4QkE0ZXNidWlsZFx1NUJGQ1x1NTE2NVx1OTAzQlx1OEY5MVx1NTkwNFx1NzQwNlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVzb2x2ZShzb3VyY2UsIGltcG9ydGVyKTtcbiAgICAgICAgICAgICAgICAvLyBcdTkwMUFcdTc1MjhcdTkwM0JcdThGOTFcdTgzQjdcdTUzRDZcdTUyMzBcdThERUZcdTVGODRcdUZGMENcdTU0MjZcdTUyMTlcdTc2RjRcdTYzQTVcdTRFMEJcdTRFMDBcdTZCNjVcdTU5MDRcdTc0MDZcdTdCMjZcdTUzRjdcdTk0RkVcdTYzQTVcdTVCRkNcdTgxRjRcdTY1RTBcdTZDRDVcdTYyN0VcdTUyMzBcdThERUZcdTVGODRcdTc2ODRcdTk1RUVcdTk4OThcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZURpciA9IGRpcm5hbWUoaW1wb3J0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9kZV9tb2R1bGVzXHU3Njg0XHU1MzA1XHU1RjE1XHU3NTI4XHU3Njg0XHU1MzA1XHU5NzAwXHU3Mjc5XHU2QjhBXHU1OTA0XHU3NDA2XHVGRjBDXHU1NkUwXHU0RTNBcG5wbVx1NTMwNVx1NEY5RFx1OEQ1Nlx1NzZFRVx1NUY1NVx1N0VEM1x1Njc4NFx1NEUwRFx1NjYyRlx1NUU3M1x1OTRGQVx1NzY4NFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBnZXRMYXN0Tm9kZU1vZHVsZXNQYXRoTGlzdChyZXNvbHZlRGlyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc29sdmVQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc291cmNlLCBpbXBvcnRlciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBU0EsU0FBMEMsU0FBUyxvQkFBb0I7QUFDdkUsT0FBTyxlQUFlO0FBQ3RCLE9BQU8sWUFBWTtBQUNuQixTQUFTLGVBQWU7QUFDeEIsT0FBTyxnQkFBZ0I7QUFDdkIsT0FBTyxnQkFBZ0I7QUFFdkIsT0FBTyxpQkFB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SUFBSSxhQUFhO0FBQUEsSUFDbEM7QUFBQSxJQUNBLGNBQWM7QUFBQSxNQUNWLFNBQVMsQ0FBQyxvQkFBb0I7QUFBQSxNQUM5QixnQkFBZ0I7QUFBQSxRQUNaLFNBQVMsQ0FBQyxlQUFlLENBQUM7QUFBQSxNQUM5QjtBQUFBLElBQ0o7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNILGVBQWU7QUFBQSxRQUNYLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztBQUFBLE1BQ3BDO0FBQUEsSUFDSjtBQUFBLEVBQ0o7QUFDSixDQUFDOyIsCiAgIm5hbWVzIjogWyJyZXNvbHZlIiwgInJlc3VsdCIsICJwYXRoUmVzb2x2ZSIsICJkaXJuYW1lIiwgImxzdGF0U3luYyIsICJyZWFkbGluayIsICJnZXROb2RlTW9kdWxlc0J5QWJzb2x1dGVQYXRoIiwgImxzdGF0U3luYyIsICJyZXNvbHZlIiwgInJlYWRsaW5rIiwgImRpcm5hbWUiLCAicGF0aFJlc29sdmUiLCAiZ2V0TGFzdE5vZGVNb2R1bGVzUGF0aExpc3QiLCAicmVzb2x2ZVBhdGgiLCAicmVzdWx0Il0KfQo=
